package com.aterrizar.dominio.neo.servicios;

import java.util.ArrayList;
import java.util.List;

import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.traversal.Evaluators;
import org.neo4j.graphdb.traversal.TraversalDescription;
import org.neo4j.graphdb.traversal.Traverser;

import com.aterrizar.dominio.Neo4J.ManagerNeo;
import com.aterrizar.dominio.Neo4J.NeoOperation;
import com.aterrizar.dominio.Neo4J.RelTypes;
import com.aterrizar.dominio.usuarios.Usuario;

public class Amigos implements NeoOperation<List<String>> {

	private Usuario usuario;
	
	public Amigos(Usuario usuario){
		this.usuario = usuario;
	}
	
	public List<String> execute() {
		GraphDatabaseService grapho = ManagerNeo.getSession();
		 
        TraversalDescription td = grapho.traversalDescription().breadthFirst()
		   .relationships( RelTypes.KNOWS, Direction.OUTGOING )
		   .evaluator( Evaluators.excludeStartPosition() );
         
        Node usuarioNeo = ManagerNeo.runInSession(new ConsultarUsuarioNeo(this.usuario));
		   Traverser t = td.traverse( usuarioNeo );
		   List<String> listNombres = new ArrayList<String>();
		 
		   for ( Node n:t.nodes() ){
			   listNombres.add ((String) n.getProperty("username"));
		   }

		return listNombres;
	}

	
}
